package 排序;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

/**
 * @author admin
 * @version 1.0.0
 * @ClassName 销售量减少的气球.java
 * @Description TODO
 * @createTime 2020年11月18日 09:57:00
 * 你有一些球的库存 inventory ，里面包含着不同颜色的球。一个顾客想要 任意颜色 总数为 orders 的球。
 *
 * 这位顾客有一种特殊的方式衡量球的价值：每个球的价值是目前剩下的 同色球 的数目。比方说还剩下 6 个黄球，那么顾客买第一个黄球的时候该黄球的价值为 6 。这笔交易以后，只剩下 5 个黄球了，所以下一个黄球的价值为 5 （也就是球的价值随着顾客购买同色球是递减的）
 *
 * 给你整数数组 inventory ，其中 inventory[i] 表示第 i 种颜色球一开始的数目。同时给你整数 orders ，表示顾客总共想买的球数目。你可以按照 任意顺序 卖球。
 *
 * 请你返回卖了 orders 个球以后 最大 总价值之和。由于答案可能会很大，请你返回答案对 109 + 7 取余数 的结果。
 *输入：inventory = [2,5], orders = 4
 * 输出：14
 * 解释：卖 1 个第一种颜色的球（价值为 2 )，卖 3 个第二种颜色的球（价值为 5 + 4 + 3）。
 * 最大总和为 2 + 5 + 4 + 3 = 14 。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/sell-diminishing-valued-colored-balls
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class 销售量减少的气球 {
    public static void main(String[] args) {
        Solution solution=new Solution();
        int i = solution.maxProfit(new int[]{2,8,4,10,6}, 20);
        System.out.println(i);
    }
    static class Solution {
        public int maxProfit(int[] inventory, int orders) {
            ArrayList<Integer> list=new ArrayList<>();
            for(int i=0;i<inventory.length;i++){
                while(inventory[i]>0){
                    list.add(inventory[i]);
                    inventory[i]--;
                }
            }
            list.sort(Comparator.reverseOrder());
            int res=0;
            for(int i=0;i<orders;i++){
                res+=list.get(i);
            }
            return res;

        }
    }
}
